package com.cencat.merchant.dto;

import com.cencat.common.enums.AuditStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
import lombok.Data;

import java.util.List;

/**
 * 商家审核DTO
 * 
 * @author cencat
 * @since 2024-01-01
 */
@Data
@Schema(description = "商家审核DTO")
public class MerchantAuditDTO {

    /**
     * 商家ID
     */
    @Schema(description = "商家ID", required = true)
    @NotNull(message = "商家ID不能为空")
    private Long merchantId;

    /**
     * 审核状态
     */
    @Schema(description = "审核状态", required = true)
    @NotNull(message = "审核状态不能为空")
    private AuditStatus auditStatus;

    /**
     * 审核备注
     */
    @Schema(description = "审核备注")
    @Size(max = 500, message = "审核备注长度不能超过500字符")
    private String auditRemark;

    /**
     * 审核人ID
     */
    @Schema(description = "审核人ID")
    private Long auditorId;

    /**
     * 审核材料文件列表
     */
    @Schema(description = "审核材料文件列表")
    private List<String> auditFiles;

    /**
     * 补充材料说明
     */
    @Schema(description = "补充材料说明")
    @Size(max = 1000, message = "补充材料说明长度不能超过1000字符")
    private String supplementRemark;

    /**
     * 审核优先级
     */
    @Schema(description = "审核优先级：1-低，2-中，3-高")
    private Integer priority;

    /**
     * 是否需要现场核查
     */
    @Schema(description = "是否需要现场核查")
    private Boolean needFieldCheck;

    /**
     * 预计审核完成时间
     */
    @Schema(description = "预计审核完成时间")
    private String expectedCompleteTime;

    /**
     * 审核类型
     */
    @Schema(description = "审核类型：1-新商家审核，2-资质变更审核，3-信息修改审核")
    private Integer auditType;

    /**
     * 关联订单ID（如果是因订单问题触发的审核）
     */
    @Schema(description = "关联订单ID")
    private Long relatedOrderId;

    /**
     * 审核标签
     */
    @Schema(description = "审核标签")
    private List<String> auditTags;

    /**
     * 是否自动审核
     */
    @Schema(description = "是否自动审核")
    private Boolean autoAudit;

    /**
     * 审核流程ID
     */
    @Schema(description = "审核流程ID")
    private String workflowId;
}